#include "GameModel.h"
using namespace std;

void GameModel::startGame(GameType type)
{
    gameType=type;

    //初始化棋盘
    gameMapVec.clear();
    for(int i=0;i<board_size;i++)
    {
        vector<int> lineboard;
        for(int j=0;j<board_size;j++){
            lineboard.push_back(0);
        }
        gameMapVec.push_back(lineboard);
    }

    //轮到黑棋
    playerflag=true;
}

void GameModel::actionPerson(int row,int col)
{
    updateGameMap(row,col);
}

void GameModel::updateGameMap(int row,int col)
{
    if(playerflag)
        gameMapVec[row][col]=1;
    else
        gameMapVec[row][col]=-1;

    //换手
    playerflag=!playerflag;
}

//判断输赢
bool GameModel::iswin(int row,int col){
    //水平方向是否有五个
    for(int i=0;i<5;i++)
    {
        if(col-i>0 &&
            col-i+4<board_size &&
            gameMapVec[row][col-i]==gameMapVec[row][col-i+1] &&
            gameMapVec[row][col-i]==gameMapVec[row][col-i+2] &&
            gameMapVec[row][col-i]==gameMapVec[row][col-i+3] &&
            gameMapVec[row][col-i]==gameMapVec[row][col-i+4])
            return true;
    }
    //竖直
    for(int i=0;i<5;i++)
    {
        if(row-i>0 &&
            row-i+4<board_size &&
            gameMapVec[row-i][col]==gameMapVec[row-i+1][col] &&
            gameMapVec[row-i][col]==gameMapVec[row-i+2][col] &&
            gameMapVec[row-i][col]==gameMapVec[row-i+3][col] &&
            gameMapVec[row-i][col]==gameMapVec[row-i+4][col])
            return true;
    }
    // "/"方向
    for(int i=0;i<5;i++)
    {
        if(row+i<board_size &&
            row+i-4>0 &&
            col-i>0 &&
            col-i+4<board_size &&
            gameMapVec[row+i][col-i]==gameMapVec[row+i-1][col-i+1] &&
            gameMapVec[row+i][col-i]==gameMapVec[row+i-2][col-i+2] &&
            gameMapVec[row+i][col-i]==gameMapVec[row+i-3][col-i+3] &&
            gameMapVec[row+i][col-i]==gameMapVec[row+i-4][col-i+4])
            return true;
    }
    // "\"方向
    for(int i=0;i<5;i++)
    {
        if(row-i>0 &&
            row-i+4<board_size &&
            col-i>0 &&
            col-i+4<board_size &&
            gameMapVec[row-i][col-i]==gameMapVec[row-i+1][col-i+1] &&
            gameMapVec[row-i][col-i]==gameMapVec[row-i+2][col-i+2] &&
            gameMapVec[row-i][col-i]==gameMapVec[row-i+3][col-i+3] &&
            gameMapVec[row-i][col-i]==gameMapVec[row-i+4][col-i+4])
            return true;
    }
    return false;
}
